#ifndef _FLAT_MINABLE_H
#define _FLAT_MINABLE_H

#include <boost/shared_ptr.hpp>
#include <boost/shared_array.hpp>
#include <boost/multi_array.hpp>

// local includes
#include "crf_minable.h"
#include "param.h"
#include "data.h"
#include "lbfgs.h"

// miniable class
class FlatMinable : public CRFMinable
{
public:
    FlatMinable(EventsPtr data, GPParameter *param);
    virtual ~FlatMinable(); 

    virtual double objective_and_gradient(
		boost::shared_array<double>, double&, boost::shared_array<double>);

protected:
    virtual void _set_emperical_kernel_count( void );

protected:
};
typedef boost::shared_ptr<FlatMinable> FlatMinablePtr;

#endif // _FLAT_MINABLE_H
